package main

import (
	"fmt"
)

// 题目：给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效
func isValid(s string) bool {
	stack := []rune{}
	mapping := map[rune]rune{
		'(': ')',
		'{': '}',
		'[': ']',
	}
	for _, rs := range s {
		// 如果是左括号，将对应的右括号入栈
		if val, ok := mapping[rs]; ok {
			stack = append(stack, val)
		} else {
			// 右括号情况：检查栈是否为空或栈顶是否匹配
			if len(stack) == 0 || stack[len(stack)-1] != rs {
				return false
			}
			// 匹配成功，弹出栈顶元素
			stack = stack[:len(stack)-1]
		}
	}
	// 所有括号必须匹配完成，栈应为空
	return len(stack) == 0
}

func main() {
	fmt.Println(isValid("()"))     // true
	fmt.Println(isValid("()[]{}")) // true
	fmt.Println(isValid("(]"))     // false
	fmt.Println(isValid("([)]"))   // false
	fmt.Println(isValid("{[]}"))   // true
	fmt.Println(isValid("({[]})")) // true
	fmt.Println(isValid(")("))     // false
}
